package com.dawn.framework.banner.core;

import cn.hutool.core.thread.ThreadUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.ApplicationArguments;
import org.springframework.boot.ApplicationRunner;
import org.springframework.core.env.Environment;
import org.springframework.util.ClassUtils;

import java.net.InetAddress;
import java.net.UnknownHostException;
import java.util.concurrent.TimeUnit;

/**
 * 项目启动成功后，提供文档相关的地址
 *
 * @author dawn
 */
@Slf4j
public class BannerApplicationRunner implements ApplicationRunner {

    @Autowired
    private Environment env;

    @Override
    public void run(ApplicationArguments args) {
        ThreadUtil.execute(() -> {
            ThreadUtil.sleep(1, TimeUnit.SECONDS); // 延迟 1 秒，保证输出到结尾
            String ip = null;
            try {
                ip = InetAddress.getLocalHost().getHostAddress();
            } catch (UnknownHostException e) {
                throw new RuntimeException(e);
            }
            String applicationName = env.getProperty("spring.application.name");
            String port = env.getProperty("server.port");
            String contextPath = env.getProperty("server.servlet.context-path");
            log.info("\n----------------------------------------------------------\n\t" +
                    "Application "+applicationName+" is running! Access URLs:\n\t" +
                    "Local: \t\thttp://localhost:" + port  +contextPath+ "/\n\t" +
                    "External: \thttp://" + ip + ":" + port  +contextPath+ "/\n\t" +
                    "Swagger文档: \thttp://" + ip + ":" + port +contextPath+ "/doc.html\n" +
                    "----------------------------------------------------------");


//            // 数据报表
//            if (isNotPresent("com.dawn.module.report.framework.security.config.SecurityConfiguration")) {
//                System.out.println("[报表模块 dawn-module-report - 已禁用][参考 https://doc.iocoder.cn/report/ 开启]");
//            }
//            // 工作流
//            if (isNotPresent("com.dawn.module.bpm.framework.flowable.config.BpmFlowableConfiguration")) {
//                System.out.println("[工作流模块 dawn-module-bpm - 已禁用][参考 https://doc.iocoder.cn/bpm/ 开启]");
//            }
//            // 商城系统
//            if (isNotPresent("com.dawn.module.trade.framework.web.config.TradeWebConfiguration")) {
//                System.out.println("[商城系统 dawn-module-mall - 已禁用][参考 https://doc.iocoder.cn/mall/build/ 开启]");
//            }
//            // ERP 系统
//            if (isNotPresent("com.dawn.module.erp.framework.web.config.ErpWebConfiguration")) {
//                System.out.println("[ERP 系统 dawn-module-erp - 已禁用][参考 https://doc.iocoder.cn/erp/build/ 开启]");
//            }
//            // CRM 系统
//            if (isNotPresent("com.dawn.module.crm.framework.web.config.CrmWebConfiguration")) {
//                System.out.println("[CRM 系统 dawn-module-crm - 已禁用][参考 https://doc.iocoder.cn/crm/build/ 开启]");
//            }
//            // 微信公众号
//            if (isNotPresent("com.dawn.module.mp.framework.mp.config.MpConfiguration")) {
//                System.out.println("[微信公众号 dawn-module-mp - 已禁用][参考 https://doc.iocoder.cn/mp/build/ 开启]");
//            }
//            // 支付平台
//            if (isNotPresent("com.dawn.module.pay.framework.pay.config.PayConfiguration")) {
//                System.out.println("[支付系统 dawn-module-pay - 已禁用][参考 https://doc.iocoder.cn/pay/build/ 开启]");
//            }
//            // AI 大模型
//            if (isNotPresent("com.dawn.module.ai.framework.web.config.AiWebConfiguration")) {
//                System.out.println("[AI 大模型 dawn-module-ai - 已禁用][参考 https://doc.iocoder.cn/ai/build/ 开启]");
//            }
        });
    }

    private static boolean isNotPresent(String className) {
        return !ClassUtils.isPresent(className, ClassUtils.getDefaultClassLoader());
    }

}
